模型训练yolov5环境搭建
本文将介绍yolov5从环境搭建到模型训练的整个过程
目录
1.anconda环境搭建
2.yolov5下载
3.素材整理
4.模型训练
5.效果预测
建议提前下载的一些工具或安装包
anconda下载地址:https://www.anaconda.com/products/individual#Downloads
yolov5源码下载地址:https://github.com/ultralytics/yolov5
1.anconda环境搭建
提醒:所有操作都是在anconda的yolo的环境下进行的,在创建yolo环境后,之后每次进入CMD都需要切换到yolo环境中去(否则进入默认的base环境中)
https://www.anaconda.com/products/individual#Downloads
下载对应版本anconda即可,这里不介绍anconda安装过程了。
安装可以参考:https://blog.csdn.net/qq_43674360/article/details/123396415
anconda安装好后,conda可以创建多个运行环境,默认是base环境。这里为yolo创建一个环境。
打开CMD命令行,为yolov5创建一个环境,注意这里用的python版本是3.8,版本过低后面可能会报错
1 | conda create -n yolo python=3.8 |
执行
1 | conda info -e |
即可看到刚刚创建的yolo环境
1 | D:\vsCodeWorkspace\python_test_20230415>conda info -e |
执行
1 | activate yolo |
即可切换到的yolo环境下了。记住退出CMD或者切换CMD窗口之后,如果想要进入yolo环境,都需要运行activate yolo指令。不然默认是在base环境下。
除此之外,进行yolo模型训练代码的编写需要用到jupyter notebook,所以需要在yolo环境下进行安装
1 | conda install jupyter notebook |
安装完成之后,只需要在yolo环境下输入
1 | jupyter notebook |
就会打开notebook,自动跳转到浏览器,打开notebook界面,之后会在notebook里进行训练yolo模型
yolov5下载
下载yolov5源码:https://github.com/ultralytics/yolov5
解压,可以看到里面有requirements.txt文件,里面记录了需要安装的包,这个txt文件可以帮助一键下载这些依赖包。
文件夹里也包含了train.py文件,这个也接下来训练yolo模型需要用到的启动文件。
接着上面的requirement.txt,介绍如何安装里面需要安装的依赖。首先打开下载好的yolov5_master 文件夹,在上面输入cmd回车,可以直接在该文件夹目录下打开命令行。
在cmd命令行打开之后,大家千万记得要切换到的yolo环境下,不然就安装到base环境中去了。
1 | activate yolo |
然后运行
1 | pip install -r requirements.txt |
就会自动把这些依赖安装好了。接下来开始训练yolo模型了。
整理yolov5模型
为了完成训练工作,需要将训练的图片按照指定的格式进行整理,
详细参照yolov5官方指南:
https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data
这里也简要介绍一遍过程,然后也为大家避坑,在训练前首先需要采集图片样本,然后再对图片中的待识别物体进行标注。
首先需要建立如下的文件夹images,labels和A.yaml文件:
D:\VSCODEWORKSPACE\PYTHON_TEST_20230415\YOLO_A
├─images
└─labels
└─A.yaml
所有文件放在yolo_A文件夹下,子文件夹images用来存放样本图片,labels文件夹用来存储标注信息。A.yaml文件用来存放一些目录信息和标志物分类。
这次测试的检测哆啦A梦的头像,采集了50张哆啦A梦的样本,放到images文件夹下:
图片的标注
接下来就要进行图片的标注工作了,图片标注用到了一个名为labelimg的工具:
https://github.com/tzutalin/labelImg
大家下载解压之后,首先要做的是删除
labelImg-master\data\predefined_classes.txt
txt文件中的内容,不然等会标记的时候会自动添加一些奇怪的类别。
然后在labelImg-master文件夹下打开cmd,进入的yolo环境中,然后还需要在yolo环境中安装一些labelimg运行需要的依赖,依次输入
1 | activate yolo |
现在,已经在yolo环境中安装好labelimg的依赖环境了,输入
1 | python labelimg.py |
即可进入的界面中来。进入之后,首先先把一些选项勾上,便于标记。
然后,最重要的是把标记模式改为yolo。
1 | View 中标记前五个 |
之后点击Open dir选择图片所在的images文件夹,选择之后会弹窗让你选择labels所在的文件夹。当然如果选错了,也可以点change save dir进行修改。
然后软件右上角打开这个选项,当标记图片后,就会自动帮归类到A了
现在就可以开始进行标记了,常用的快捷键,用主要wad三个键
1 | Ctrl + u Load all of the images from a directory |
通过鼠标拖拽框选即可标注:
所有图片标注好之后,再来看的labels文件夹,可以看到很多txt文件。每个文件都对应着标记的类别和框的位置:
最后还要做的是建立yaml文件,文件的位置也不要放错:
文件里面内容如下,其中train和val都是images的目录,labels的目录不用写进去,会自动识别。nc代表识别物体的种类数目,names代表种类名称,如果多个物体种类识别的话,可以自行增加。
1 | # train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/] |
到目前,的训练的图片材料就已经准备好了。
出现问题解决
labelImg闪退的高效解决方法
解决方法:
1.labelImg软件安装路径中不能出现中文路径,如果出现,换个英文的路径,(一般这样情况比较多)。
2.进入到C:\Users\Administrator,将.labelImgSettings.pkl文件删除,重新运行即可。(找不到可以目录下进行搜索)
3:使用labelImg 所在 anaconda 终端环境中依次执行以下命令
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install labelImg -i https://pypi.tuna.tsinghua.edu.cn/simple/
最后在中输入python labelimg.py启动。
yolov5模型训练
现在开始训练模型
首先进行模块导入
1 | # 若是没有进行过下载,则进行下载yolov5源码进行 |
后把的的素材yolo_A文件夹放到yolov5根目录
然后一下代码可以测试能否正常工作,顺带会下载yolov5s.pt文件,这个文件后面训练的时候会用到
1 | python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images/ |
然后在 yolov5/runs/detect/exp 文件夹可以看到识别结果
接下来就要开始训练模型了:
1 | python train.py --img 640 --batch 50 --epochs 100 --data ../yolo_A/A.yaml --weights yolov5s.pt --nosave --cache |
注意:../yolo_A/A.yaml 路径按照需要的路径进行调整
训练完成后,们可以看到训练结果保存的位置:
在对应exp文件下可以看到用训练集做预测的结果:
1 | Image(filename='runs/train/exp2/test_batch0_pred.jpg', width=800) # test batch 0 predictions |
现在们用训练出来的结果找一张网图做测试(文件名和导出预测文件地址不一定相同,但是相似,自行寻找)
1 | python detect.py --weights /content/yolov5/runs/train/exp2/weights/best.pt --img 640 --conf 0.25 --source ../test2.jpg |
出现问题解决
DLL load failed: 页面文件太小,无法完成操作
需要把电脑无用程序都关闭。还有python.exe注意不能同时被2个程序使用,
提示页面文件太小,说明虚拟内存不够了,可以关掉一些进程,
或者把虚拟内存往大调一下(此处参考网上修改) http://www.nndssk.com/xtwt/122595A9Q5mb.html
OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败。 Error loading “C:\Users\dell.conda\envs\yolo\lib\site-packages\torch\lib\shm.dll” or one of its dependencies.
RuntimeError: [enforce fail at C:\actions-runner_work\pytorch\pytorch\builder\windows\pytorch\c10\core\impl\alloc_cpu.cpp:72] data. DefaultCPUAllocator: not enough memory: you tried to allocate 49152000 bytes.
修改train.py中 batchsize和worker,将数值减少,
1 | parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path') |
TabError: Inconsistent use of tabs and spaces in indentation
首先这个错误的意思是:在缩进的时候,使用了错误的空格和tab
造成这个错误的原因是代码前先用了空格然后再用tab完成了对齐,也就是说,这种错误产生的原因正是由于空格或者tab缩进造成的。
将空格删除,直接使用tab完成缩进,发现程序正常运行;
再试一下空格缩进,然后发现还是报错了,同样TabError: Inconsistent use of tabs and spaces in indentation。
注意,整个代码一定使用相同的,都用空格,或者都用tab
AssertionError: Label class 1 exceeds nc=1 in data/steel.yaml. Possible class labels are 0-0
仔细阅读报错内容可以发现:类别与标签序号不匹配(自定义数据集只有一类)
经过的仔细思考,猜测是在生成labels时出现了问题,通过阅读生成labels的脚本,找到问题如下:
查看 labels 首行首个字母是2 不是0 ,需要将2修改为 0
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;